# 2.7 检测视频中的人脸 调用VideoCapture()加载视频文件 cap = cv.VideoCapture('video.mp4') 接下来调用cap的read()方法读取检测图片 flag, frame = cap.read() flag：如果视频一直在播放，则为True；如果视频停下来，则为False frame：当前的帧

import cv2 as cv


def face_detect_demo(img):
    # 先将图片转灰度
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    # 加载特征文件
    face_detector = cv.CascadeClassifier("haarcascade_frontalface_default.xml")
    # 在图像上进行人脸检测
    # 返回检测出来的人脸 外部列表描述每一个人脸
    # 前两个数值是左上角的坐标 后两个数值是宽和高
    faces = face_detector.detectMultiScale(gray)
    for face in faces:
        x, y, w, h = face  # 前两个数值是左上角的坐标 后两个数值是宽和高
        color = (0, 255, 0)
        cv.rectangle(img, face, color, thickness=2)
    cv.imshow("result", img)


# 读取视频
cap = cv.VideoCapture("video.mp4")
while True:
    # 循环读取每一帧
    # 返回值1 如果视频一直在播放，则为True；如果视频停下来，则为False
    # 返回值2 当前帧
    flag, frame = cap.read()
    if not flag:  # 播放完成 则退出循环
        break

    face_detect_demo(frame)
    cv.waitKey(10)

cv.destroyAllWindows()
cap.release()
